From c35a78110c00ccf6e326149e6b2f52b84c72d3f9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Sun, 7 May 2017 12:36:47 +0200 Subject: [PATCH] menu: Stop looking at padding and margin manually --- gtk/gtkmenu.c | 129 ++++++++++++-------------------------------------- 1 file changed, 31 insertions(+), 98 deletions(-) diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 1aa1c75516..d2eb03ebc0 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -2570,30 +2570,6 @@ gtk_menu_reorder_child (GtkMenu *menu, } } -static void -get_menu_padding (GtkWidget *widget, - GtkBorder *padding) -{ - GtkStyleContext *context; - - context = gtk_widget_get_style_context (widget); - - gtk_style_context_get_padding (context, - padding); -} - -static void -get_menu_margin (GtkWidget *widget, - GtkBorder *margin) -{ - GtkStyleContext *context; - - context = gtk_widget_get_style_context (widget); - - gtk_style_context_get_margin (context, - margin); -} - static void gtk_menu_realize (GtkWidget *widget) { @@ -2602,22 +2578,21 @@ gtk_menu_realize (GtkWidget *widget) GtkAllocation allocation; GtkWidget *child; GList *children; - GtkBorder arrow_border, padding; + GtkBorder arrow_border; GTK_WIDGET_CLASS (gtk_menu_parent_class)->realize (widget); gtk_widget_get_allocation (widget, &allocation); - get_menu_padding (widget, &padding); get_arrows_border (menu, &arrow_border); priv->view_window = gdk_window_new_child (gtk_widget_get_window (widget), GDK_ALL_EVENTS_MASK, &(GdkRectangle) { - allocation.x + padding.left, - allocation.y + padding.top + arrow_border.top, - MAX (1, allocation.width - padding.left - padding.right), - MAX (1, allocation.height - padding.top - padding.bottom - - arrow_border.top - arrow_border.bottom)}); + allocation.x, + allocation.y + arrow_border.top, + MAX (1, allocation.width), + MAX (1, allocation.height - + arrow_border.top - arrow_border.bottom)}); gtk_widget_register_window (widget, priv->view_window); priv->bin_window = gdk_window_new_child (priv->view_window, @@ -2625,8 +2600,8 @@ gtk_menu_realize (GtkWidget *widget) &(GdkRectangle) { 0, - priv->scroll_offset, - MAX (1, allocation.width + padding.left + padding.right), - MAX (1, priv->requested_height + padding.top + padding.bottom)}); + MAX (1, allocation.width), + MAX (1, priv->requested_height)}); gtk_widget_register_window (widget, priv->bin_window); children = GTK_MENU_SHELL (menu)->priv->children; @@ -2716,7 +2691,6 @@ calculate_line_heights (GtkMenu *menu, guint **ret_min_heights, guint **ret_nat_heights) { - GtkBorder padding; GtkMenuPrivate *priv; GtkMenuShell *menu_shell; GtkWidget *child, *widget; @@ -2737,10 +2711,6 @@ calculate_line_heights (GtkMenu *menu, n_columns = gtk_menu_get_n_columns (menu); avail_width = for_width - (2 * priv->toggle_size + priv->accel_size) * n_columns; - get_menu_padding (widget, &padding); - - avail_width -= padding.left + padding.right; - for (children = menu_shell->priv->children; children; children = children->next) { gint part; @@ -2797,7 +2767,7 @@ gtk_menu_size_allocate (GtkWidget *widget, GList *children; gint x, y, i; gint width, height; - GtkBorder arrow_border, padding; + GtkBorder arrow_border; g_return_if_fail (GTK_IS_MENU (widget)); g_return_if_fail (allocation != NULL); @@ -2806,8 +2776,6 @@ gtk_menu_size_allocate (GtkWidget *widget, menu_shell = GTK_MENU_SHELL (widget); priv = menu->priv; - get_menu_padding (widget, &padding); - g_free (priv->heights); priv->heights_length = calculate_line_heights (menu, allocation->width, @@ -2815,14 +2783,14 @@ gtk_menu_size_allocate (GtkWidget *widget, NULL); /* refresh our cached height request */ - priv->requested_height = padding.top + padding.bottom; + priv->requested_height = 0; for (i = 0; i < priv->heights_length; i++) priv->requested_height += priv->heights[i]; - x = allocation->x + padding.left; - y = allocation->y + padding.top; - width = allocation->width - padding.left - padding.right; - height = allocation->height - padding.top - padding.bottom; + x = allocation->x; + y = allocation->y; + width = allocation->width; + height = allocation->height; if (menu_shell->priv->active) gtk_menu_scroll_to (menu, priv->scroll_offset); @@ -2987,7 +2955,6 @@ static void gtk_menu_measure (GtkWidget *widget, guint max_accel_width; gint child_min, child_nat; gint min_width, nat_width; - GtkBorder padding; min_width = nat_width = 0; @@ -3065,10 +3032,6 @@ static void gtk_menu_measure (GtkWidget *widget, nat_width += 2 * max_toggle_size + max_accel_width; nat_width *= gtk_menu_get_n_columns (menu); - get_menu_padding (widget, &padding); - min_width += padding.left + padding.right; - nat_width += padding.left + padding.right; - priv->toggle_size = max_toggle_size; priv->accel_size = max_accel_width; @@ -3093,14 +3056,12 @@ static void gtk_menu_measure (GtkWidget *widget, } else { - GtkBorder padding, arrow_border; + GtkBorder arrow_border; guint *min_heights, *nat_heights; gint n_heights, i; gint min_height, single_height, nat_height; - get_menu_padding (widget, &padding); - - min_height = nat_height = padding.top + padding.bottom; + min_height = nat_height = 0; single_height = 0; n_heights = @@ -3114,8 +3075,7 @@ static void gtk_menu_measure (GtkWidget *widget, } get_arrows_border (menu, &arrow_border); - single_height += padding.top + padding.bottom - + arrow_border.top + arrow_border.bottom; + single_height += arrow_border.top + arrow_border.bottom; min_height = MIN (min_height, single_height); if (priv->have_position) @@ -3476,7 +3436,6 @@ get_arrows_sensitive_area (GtkMenu *menu, GdkWindow *window; gint width, height; gint win_x, win_y; - GtkBorder padding; gint top_arrow_height, bottom_arrow_height; gtk_css_gadget_get_preferred_size (priv->top_arrow_gadget, @@ -3494,8 +3453,6 @@ get_arrows_sensitive_area (GtkMenu *menu, width = gdk_window_get_width (window); height = gdk_window_get_height (window); - get_menu_padding (widget, &padding); - gdk_window_get_position (window, &win_x, &win_y); if (upper) @@ -3503,15 +3460,15 @@ get_arrows_sensitive_area (GtkMenu *menu, upper->x = win_x; upper->y = win_y; upper->width = width; - upper->height = top_arrow_height + padding.top; + upper->height = top_arrow_height; } if (lower) { lower->x = win_x; - lower->y = win_y + height - padding.bottom - bottom_arrow_height; + lower->y = win_y + height - bottom_arrow_height; lower->width = width; - lower->height = bottom_arrow_height + padding.bottom; + lower->height = bottom_arrow_height; } } @@ -4020,13 +3977,8 @@ gtk_menu_position_legacy (GtkMenu *menu, gint space_left, space_right, space_above, space_below; gint needed_width; gint needed_height; - GtkBorder padding; - GtkBorder margin; gboolean rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL); - get_menu_padding (widget, &padding); - get_menu_margin (widget, &margin); - /* The placement of popup menus horizontally works like this (with * RTL in parentheses) * @@ -4058,7 +4010,7 @@ gtk_menu_position_legacy (GtkMenu *menu, /* the amount of space we need to position the menu. * Note the menu is offset "thickness" pixels */ - needed_width = requisition.width - padding.left; + needed_width = requisition.width; if (needed_width <= space_left || needed_width <= space_right) @@ -4067,12 +4019,11 @@ gtk_menu_position_legacy (GtkMenu *menu, (!rtl && needed_width > space_right)) { /* position left */ - x = x - margin.left + padding.left - requisition.width + 1; + x = x - requisition.width + 1; } else { /* position right */ - x = x + margin.right - padding.right; } /* x is clamped on-screen further down */ @@ -4112,15 +4063,13 @@ gtk_menu_position_legacy (GtkMenu *menu, * The algorithm is the same as above, but simpler * because we don't have to take RTL into account. */ - needed_height = requisition.height - padding.top; + needed_height = requisition.height; if (needed_height <= space_above || needed_height <= space_below) { - if (needed_height <= space_below) - y = y + margin.top - padding.top; - else - y = y - margin.bottom + padding.bottom - requisition.height + 1; + if (needed_height > space_below) + y = y - requisition.height + 1; y = CLAMP (y, workarea.y, workarea.y + workarea.height - requisition.height); @@ -4306,6 +4255,7 @@ gtk_menu_position (GtkMenu *menu, g_signal_connect (toplevel, "moved-to-rect", G_CALLBACK (moved_to_rect_cb), menu); + gdk_window_move_to_rect (toplevel, &rect, rect_anchor, @@ -4353,7 +4303,6 @@ gtk_menu_scroll_to (GtkMenu *menu, { GtkMenuPrivate *priv = menu->priv; GtkCssNode *top_arrow_node, *bottom_arrow_node; - GtkBorder padding; GtkWidget *widget; GtkAllocation allocation; gint x, y; @@ -4366,13 +4315,8 @@ gtk_menu_scroll_to (GtkMenu *menu, view_width = allocation.width; view_height = allocation.height; - get_menu_padding (widget, &padding); - - view_width -= padding.left + padding.right; - view_height -= padding.top + padding.bottom; - - x = allocation.x + padding.left; - y = allocation.y + padding.top; + x = allocation.x; + y = allocation.y; top_arrow_node = gtk_css_gadget_get_node (priv->top_arrow_gadget); gtk_css_node_set_visible (top_arrow_node, priv->upper_arrow_visible); @@ -4450,15 +4394,9 @@ gtk_menu_scroll_item_visible (GtkMenuShell *menu_shell, if (compute_child_offset (menu, menu_item, &child_offset, &child_height, &last_child)) { - GtkBorder padding; - y = priv->scroll_offset; height = gdk_window_get_height (gtk_widget_get_window (widget)); - get_menu_padding (widget, &padding); - - height -= padding.top + padding.bottom; - if (child_offset < y) { /* Ignore the enter event we might get if the pointer @@ -4758,13 +4696,12 @@ get_visible_size (GtkMenu *menu) { GtkAllocation allocation; GtkWidget *widget = GTK_WIDGET (menu); - GtkBorder padding, arrow_border; + GtkBorder arrow_border; gint menu_height; gtk_widget_get_allocation (widget, &allocation); - get_menu_padding (widget, &padding); - menu_height = allocation.height - padding.top - padding.bottom; + menu_height = allocation.height; get_arrows_border (menu, &arrow_border); menu_height -= arrow_border.top; @@ -4822,14 +4759,10 @@ static gint get_menu_height (GtkMenu *menu) { GtkMenuPrivate *priv = menu->priv; - GtkWidget *widget = GTK_WIDGET (menu); - GtkBorder padding, arrow_border; + GtkBorder arrow_border; gint height; - get_menu_padding (widget, &padding); - height = priv->requested_height; - height -= padding.top + padding.bottom; get_arrows_border (menu, &arrow_border); height -= arrow_border.top; -- 2.30.2